package com.lee.rabbitmq.config;

import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * springboot的rabbitMQ配置类
 *
 * @author Lee
 * @createDate 2021/12/17 10:29
 */
@Configuration
public class RabbitMqConfig {

    /**
     * 配置一个Direct类型的交换机
     * 还可以传入其他值参考java代码
     */
    @Bean
    public DirectExchange directExchange(){
        return new DirectExchange("bootDirectExchange");
    }
    /**
     * 配置一个队列
     * 还可以传入其他值参考java代码
     */
    @Bean
    public Queue directQueue(){
        return new Queue("bootDirectQueue");
    }

    /**
     * 配置一个队列和交换机的绑定
     * @param directQueue 需要绑定的队列的对象，参数名必须要与某个@Bean的方法名完全相同这样就会自动进行注入
     * @param directExchange 需要绑定的交换机的对象，参数名必须要与某个@Bean的方法名完全相同这样就会自动进行注入
     */
    @Bean
    public Binding directBinding(Queue directQueue,DirectExchange directExchange){
        /**
         * 完成绑定
         * 参数1  为需要绑定的队列
         * 参数2  为需要绑定的交换机
         * 参数3  绑定时的Routingkey
         */
        return BindingBuilder.bind(directQueue).to(directExchange).with("bootDirectRoutingkey");
    }


    /**
     * 配置一个fanout类型的交换机
     * 还可以传入其他值参考java代码
     */
    @Bean
    public FanoutExchange fanoutExchange(){
        return new FanoutExchange("fanoutExchange");
    }

    /**
     * 配置一个topic类型的交换机
     * 还可以传入其他值参考java代码
     */
    @Bean
    public TopicExchange topicExchange(){
        return new TopicExchange("topicExchange");
    }
}
